#include <iostream>
/**
 * & 的用法
*/

/**
 * 1、给属性取别名
*/
void filed(){
    int value = 10;
    int& ref = value; // 它是变量的别名（另一个名字），指向同一个内存地址。

    std::cout << ref << std::endl;
    value = 20;
    std::cout << ref << std::endl;
    std::cout << value << std::endl;
    ref = 30;
    std::cout << ref << std::endl;
    std::cout << value << std::endl;
}


/**
 * 2、引用函数的参数
*/
void incr(int& value,int number){
    value += number; // 直接修改原变量
}

void incr2(int value,int number){
    value += number; // 不影响原变量
}

void method(){ 
    int value1 = 10;
    incr(value1,10);
    std::cout << value1 << std::endl; // 输出 20

    int value2 = 10;
    incr2(value2,10);
    std::cout << value2 << std::endl; // 输出 10
}

/**
 * 3、获取变量的地址
*/
void getAddress(){
    int value = 10;
    int* p = &value; // ptr 存储 value 的地址
    std::cout << p << std::endl; // 输出value的地址 0x5ffe64
    std::cout << *p << std::endl; // 输出value的值 10
}

int main()
{
    // method();
    // filed();
    // getAddress();

    int value = 20;
    std::cout << __cplusplus << std::endl;
    std::cout << &value << std::endl;
    return 0;
}
